//#include <memory.h>
#include "..\inc\Msg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


namespace sbase
{
	DEFINE_FIXEDSIZE_ALLOCATOR(CMsg, 1000, CMemoryPool::GROW_FAST );
	const int _MSG_INVALID		        	 =  0;
	//////////////////////////////////////////////////////////////////////
	void 
		CMsg::Init()
	{
		::memset(m_bufMsg, 0L, sizeof(m_bufMsg));
		m_head.usSize	= 0;
		m_head.usType	= _MSG_INVALID;
	}

	//////////////////////////////////////////////////////////////////////
	bool 
		CMsg::IsValid(void) const
	{
		if(this->GetHeadSize() >= this->GetSize())
			return false;

		if(_MSG_INVALID == this->GetType())
			return false;

		return true;
	}


	//////////////////////////////////////////////////////////////////////
	// virtual
	//////////////////////////////////////////////////////////////////////
	bool
		CMsg::Create(const void* pszBufMsg, USHORT nsMsgSize)
	{
		if(!pszBufMsg)
			return false;

		MsgHead* pHead = (MsgHead*)pszBufMsg;
		if((USHORT)nsMsgSize != pHead->usSize)
			return false;

		if(_MSG_INVALID == pHead->usType)
			return false;
		m_head.usSize=pHead->usSize;
		m_head.usType=pHead->usType;
		::memcpy_s(m_bufMsg,sizeof(m_bufMsg), pszBufMsg, nsMsgSize);
		return true;
	}
}
